perm filename DERIVE[W77,JMC] blob
sn#263933 filedate 1977-02-10 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .require "memo.pub[let,jmc]" source file
C00006 ENDMK
C⊗;
.require "memo.pub[let,jmc]" source file;
.at "!f" ⊂"%Af%*"⊃
.at "!y" ⊂"%Ay%*"⊃
.cb
Derived Functions
.break
A derived function ⊗f' of ⊗f contains a computation sequence of ⊗f in its
arguments and values. We speculate that proving assertions about derived
functions may be easier because more information is kept. Induction on a
derived function may sometimes correspond to something like course-of-values
induction on the original. We would like to say "the derived function"
instead of "a derived function" and "the computation sequence" instead of
"a computation sequence", but a single preferred notion has not yet become
apparent. Note also that the derived function will depend on the way the
function is described and not just on the argument-value pairing.
Derived functions are presumably related to their originals by something
like the homomorphism theorem and are therefore equi-convergent.
[The homomorphism theorem is %2∀ff'. [(!f %8o%2 f = f' %8o%2 !y) ⊃ (!f %8o%2
F(f) = F'(f') %8o%2 !y)] ⊃ (!f %8o%2 Y(F) = Y(F') %8o%2 !y)]%1.
Here are some examples of functions and derived functions:
.begin nofill
#. %2f x ← qif p x qthen x qelse f h x
f' u ← qif p qa u qthen u qelse f'(h qa u . u)
f''(x,u) ← qif p x qthen u qelse f''(h x, x . u)
#. f x ← qif x > 100 qthen x-10 qelse f f (x + 11)
f'(x,v) ← qif x > 100 qthen (x - 10) . v qelse [λ w . f'(qa w, w)][f'(x + 11,%8 %2(x%8 %2+%8 %211)%8 %2.%8 %2v)]
#. flat[x,u] ← qif qat x qthen x . u qelse flat[qa x, flat[qd x, u]]
flat'[x,u,v] ← qif qat x qthen [x . u] . v qelse
[λ z . flat'[qa x, qa z, qa x . dz]] [flat'[qd x, u, qd x . v]]
flat''[x,u,v] ← qif qat x qthen (x . u) . v qelse
[λ z flat''[qa x, qa z, <qa x qa z> . qd z]] [flat''[qd x, u, <qd x u> . v]]
#. flatten x ← qif qat x qthen <x> qelse flatten qa x * flatten qd x
flatten'[x,v] ← qif qat x qthen <x> . v qelse
α{flatten'[qa x, qa x . v]} [λ z . α{flatten'[qd x, qd x . qd z]} [λ w [qa z * q w] . qd w]
.end